Date		:	11, 12 et 23 mai 1991
		Protection	:	MOT DE PASSE
		Programme	:       FINAL ORBIT
		Outils		:	CARTE PANO_AT, PERISCOPE, QUAID, S-ICE
		Fichier		:	XXXV.EXE	-->   fichier VGA
					XXXE.EXE        -->   fichier EGA 
		Temps pass�	:	8 HEURES ( quand le d�mon vous prends !)
		Soci�t�		:	AFTERSHOCK ENTERTAINMENT
		Divers	        :	PERISCOPE charg� � 0A9B:0000
					SOFT-ICE en DRIVER.SYS
		Origine		:	INDONESIE
		Num�ro		:	075

	
	Une approche pas trop difficile puisque au bout de quelques minutes 
	je tombe sur une case m�moire CS:00BE que l'on ne mets pas � zero si
	la r�ponse est mauvaise avant un RET. Cette case contient 0001.

	2A14:420C 2E3B874713    CMP     AX,CS:[BX+1347]
	2A14:4211 7507          JNZ     421A	---> SAUT � forcer.
	2A14:4213 2E            CS:
	2A14:4214 C706BE000000  MOV     WORD PTR [00BE],0000
	2A14:421A C3            RET

	Ce saut forc� en JZ donne 8 vies au jeu. ( alors qu'avec la mauvaise
	r�ponse on part avec un s�rieux handicap - 0 vie )

	Mais de temps en temps je tombe sur une mauvaise surprise comme de ne
	pas trouver la chaine 75072EC706... dans le ou les fichiers.

	Deux solutions:

	1- le programme est compact�.	LZEXE ou EXEPACK.
	2- La routine du mot de passe est cod�e.

	Malheureusement c'est la deuxi�me solution qui est appliqu�e ici.
	La routine de codage est en clair. ( heureusement )

	PERISCOPE est plac� en arr�t sur l'adresse 2A14:4211 avec la commande
	BM 2A14:4211 2A14:4211 W 
	BA pour valider et
	GT pour d�marrer...et on attend. 

	Si ma carte PANO fonctionnait sur un 386-33 je n'attendrais pas
	longtemps, de plus je pourrais imm�diatement m'arr�ter sur le bout de
	code qui modifie la position m�moire 2A14:4211, mais comme les 
	adresses syst�mes ne sont pas disponibles sur les I/O je n'ai pas le
	choix, pour l'instant.

	PERISCOPE s'affiche avec ceci:

	AX=0013  BX=02FE  CX=0000  DX=00F3  SP=0640  BP=0D66  SI=0000  DI=4880
	DS=967E  ES=29AD  SS=98CB  CS=967E  IP=0338   NV UP EI NG NZ AC PE CY
	 WR ES:4880 = 39
	967E:0338 AA            STOSB

	J'ai du mal � retrouver mon CS:IP de 2A14:4211 jusqu'au moment ou je 
	comprends que l'adresse physique ES:4880 est la m�me !

	XA 2a14:4210                                                            
	2E350H
	XA es:4880                                                              
	2E350H
	
	Je part � la recherche de la provenance de mes octets.

	AX=079A  BX=16CE  CX=0001  DX=0069  SP=063E  BP=0D67  SI=0000  DI=4881
	DS=967E  ES=9B40  SS=98CB  CS=967E  IP=0326   NV UP EI PL NZ NA PO NC
	 RD ES:16CE = 0075
	967E:0326 26            ES:
	967E:0327 8B07          MOV     AX,[BX]

	Celui-ci est tir� de 9B40:16CE, on dump pour voir...

  d es:16ce                                                               
  9B40:16CE                                            75 00                 u.
  9B40:16D0  07 95 06 FE FE 00 87 87-00 DB 17 07 F8 F8 00 C3   ...~~....[..xx.C

	Mais cette chaine est apparement elle-m�me fabriqu�e puisque introuva-
	ble dans le fichier.
	Il ne reste plus qu'� d�cortiquer la routine de codage.

	23 mai 1991

	Repris la chasse avec SOFT-ICE, un petit probl�me comme toujours:
	retrouver mon CS:4211 puisque forc�ment il ne correspond plus � celui
	de PERISCOPE. Mais comme avec SOFT-ICE on ne peut pla�er des points
	d'arr�ts sur les registres ( il eu �t� facile de tester IP avec la
	valeur 4211 ! ) il m'a fallu tester la touche ENTER au clavier puis
	remonter. Le code SCAN-CLAVIER de la touche ENTER est 1C � lire �
	l'adresse 60h en I/O.

	Finalement mon CS sous SOFT-ICE est 1FB2.
	Je place SOFT-ICE en arr�t �criture sur l'adresse 1FB2:4210 W eq 13
	pour pouvoir d�rouler la "confection" de mon 75 en 4211.
	De proche en proche j'arrive � retrouver mon 75 en ES:16CE ( ES=9AC0 )
	Je continue pour finalement me perdre dans des routines inextricables
	et dans lesquelles en rempla�ant mon 75 par 74 cel� ne fonctionne plus.
	Je reviens donc en arri�re et je m'aper�ois que la derni�re position
	dans laquelle la substitution de 75 par 74 fonctionne est 9AC0:16CE.

	Je d�cide, si la routine de codage est en clair de faire un CALL dans
	une zone "COPYRIGHT" et de revenir en ayant d�cr�ment� mon 75 de 1.

	Il y a plus simple je suis d'accord, mais � d�faut de trouver la bonne
	piste...  et j'ai d�j� perdu trop de temps sur ce p%@!?&*@ de jeu.
	( la pelouse m'attend... )

	La routine originale est la suivante:
	
	268907	MOV	ES:[BX],AX	;	9AC0:16CE = 75   
	45	INC	BP
	A1A804	MOV	AX,[04A8]

	A ce niveau en d�cr�mentant ES:16CE le soft fonctionne sans mot de
	passe. Cette routine est en clair, on peut donc la modifier.
	En d�but du segment CS:0000 on trouve apr�s un JMP une zone DATA
	comprenant le COPYRIGHT et le nom de la soci�t�.
	En pla�ant un CALL 3 ( pour pr�server les 3 octets du saut )
	Ce n'est qu'apr�s avoir fait un CALL 0 et que tout s'est plant� que
	j'ai eu l'id�e d'examiner ces trois octets; c'est un JMP !!! alors
	on y touche pas et on saute 3 octets plus loin.
	Donc en pla�ant un CALL 0003 � la place	de l'instruction MOV AX,[04A8]
	et en reportant celle-ci dans le CALL cel� devrait marcher.
	Et en fait cel� fonctionne.

	Routine modifi�e:

	268907		MOV	ES:[BX],AX
	45		INC	BP
	E8A3FC		CALL	0003

	Routine pla��e en CS:0003 :
 IP
 0003	26803ECE1675	CMP BYTE PTR ES:[16CE],75 ; [16CE] = 75 ?
 0009 �	7505		JNZ 0010		  ; si pas 75 on sort.
 000B �	26FE0ECE16	DEC BYTE PTR ES:[16CE]	  ; sinon 75 = 74 et on
 0010 �	A1A804		MOV AX,[04A8]		  ; remet l'instruction �cras�e
      						  ; par le CALL 3 puis 
 0013  	C3		RET			  ; on sort.
	
	Et le tour est jou�, ouf !
	En conclusion SOFT-ICE est plus puissant que PERISCOPE mais il poss�de
	� mon point de vu deux d�fauts dont un majeur il s'agit de l'impos-
	sibilit� de pla�er des points d'arr�ts sur les REGISTRES et un d�faut
	moindre qui est de ne pas poss�der de fonction permettant d'envoyer
	les sorties �cran dans un fichier.
	PERISCOPE avec ma carte PANO sur un 286 est plus puissant que SOFT-ICE
	sans carte PANO sur un 386.
 
	Avec PCTOOLS se pla�er en SECTEUR 2, DEP 349 et y mettre: 

		 E8 A3 FC

	puis SECTEUR 1,	DEP 3 en �crivant:

		 26 80 3E CE 16 75 75 05 26 FE 0E CE 16 A1 A8 04 C3

	Fichier EGA: XXXE.EXE
	
	La modification du secteur 2 est identique mais l'octet 75 n'est plus
	pla�� en ES:16CE , il se trouve en ES:1887 il faut donc remplacer
	dans la chaine du secteur 1:  CE16 par 8718 ( 2 fois )

	FREDDY